package com.tedu.day02.oop;

/**
 * 抽象类：抽象类与抽象方法   关键字：abstract
 * 类：只能提供行为的概念，没有具体的实现行为
 *
 * 抽象类与面向对象---多态绝对关系【向上造型创建抽象对象】
 * 使用多态创建抽象类对象.抽象类本身无法创建对象.需要使用多态完成抽象类创建
 *
 * 什么是使用抽象类
 * 复杂项目时.需要在不同类下实现不同的功能.首先抽象类【安卓】
 *
 * 定义抽象类与抽象方法？
 * 抽象类：修饰符  abstract class 类名{} ------毫无意义 必须结合抽象方法
 * 抽象方法 ：修饰符 abstract 返回值 方法（参数）；----没有具体的实现【不能加{}】
 *
 * 抽象类的“实例化 ：创建对象“ 抽象自身无法实例化
 * ①首先创建子类【创建几个都行】， 继承抽象【父】类， 子类一定实现抽象【父】类
 * ②使用面向对象：多态【向上造型】   抽象类 引用=new 子类 【实现】子类（）；
 * 注意：抽象类一定会发生重写.子类继承抽象【父】类.也可以叫做”实现类“！
 */
abstract class Animals{//抽象类
    //抽象方法     没有具体的实现【代码块】---一旦抽象类出现 一定会继承
    public abstract void say();
    //①定义不能由final修饰的抽象方法
    // public final abstract void sleep();
    //②定义抽象变量？ ×
    //abstract int i=1;
    //③定义静态变量？ 可以
        static int i=1;
    //④定义静态抽象变量？ 不可以
    // static abstract int j=1;
    //⑤定义一个静态的抽象方法【无实现】？  不可以
    //public static abstract void eat();
    //⑥定义一个静态方法【无实现:加空的代码块】？ 正确
    public static void set(){};
    //⑤⑥总结：抽象方法/静态方法.方法定义：修饰符 static|abstract 返回值 方法名
    //⑦抽象类类名可以定义内部类.静态内部类 正确
     static class Sas{}
    //⑧抽象类有构造器？  有
    public Animals() {}
    //⑨抽象类可以存在普通的实现方法？ 可以
    public void run(){}

}
    //⑩抽象类可以继承抽象类？ 实现：两个抽象类--形容一个实现  正确
  abstract class Thing extends Animals{
      public abstract void sleep();
    }
//继承之后目的：两个抽象类中所有抽象方法--继承【子】抽象类

//实现类：实现抽象【父类】类的方法----多个实现类---继承---抽象
class Person1 extends Animals{//报错原因：需要完成重写

    public void say() {
        System.out.println("人---说话-");
    }

}



public class 抽象类 {
    public static void main(String[] args) {
        //抽象类无法创建对象：提供抽象方法--必须由子类实现-----多态【造型】
        Animals a=new Person1();
        a.say();//向上造型--重写抽象【父】类的抽象方法【覆盖】

    }
}
